#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;

// vector<int> findAnagrams(string s, string p)
// {
//     unordered_map<char, int> hash1;
//     unordered_map<char, int> hash2;
//     vector<int> v;
//     for (auto &e : p)
//     {
//         hash1[e]++;
//     }
//     for (int left = 0, right = 0; right < s.size(); right++)
//     {
//         hash2[s[right]]++;
//         if (right > p.size() - 2)
//         {
//             hash2[s[left]]++;
//             if (hash1 == hash2)
//             {
//                 v.push_back(left);
//             }
//             hash2[s[right]]--;
//             hash2[s[left]]--;
//             left++;
//         }
//     }
//     return v;
// }

vector<int> findAnagrams(string s, string p)
{
    vector<int> v;
    int hash1[26] = {0};
    int hash2[26] = {0};
    for(auto &e : p)
    {
        hash1[e - 'a']++;
    }
    for (int left = 0, right = 0, count = 0; right < s.size(); right++)
    {
        char in = s[right];
        if(++hash2[in - 'a'] <= hash1[in - 'a'])
            count++;
        if(right - left + 1 > p.size())
        {
            char out = s[left++];
            if(hash2[out - 'a']-- <= hash1[out - 'a'])
                count--;
        }
        if(count == p.size())
        {
            v.push_back(left);
        }
    }
    return v;
}